package com.jdd.modules.parking.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jdd.modules.parking.entity.ConfigParkInfo;
import com.jdd.modules.parking.entity.ParkArmInfo;
import com.jdd.modules.parking.entity.ParkCarEnterLog;
import com.jdd.modules.parking.entity.ParkWorkStation;
import com.jdd.modules.sdkidentifyresultpushlog.entity.ReChargeVo;
import com.jdd.modules.sdkidentifyresultpushlog.entity.SdkIdentifyResultPushLog;

import java.util.List;
import java.util.Map;

/**
 * @Description: 车场出入口配置
 * @Author: jdd
 * @Date: 2021-02-15
 * @Version: V1.0
 */
public interface IParkArmInfoService extends IService<ParkArmInfo> {

    /**
     * 根据设备序列号查询到车道信息
     *
     * @param serialNo 设备序列号
     * @return 车道信息
     **/
    ParkArmInfo findParkArmInfoBySerialNo(String serialNo);

    /**
     * 根据设备ip地址查询到车道信息
     *
     * @param ip ip地址
     * @return 车道信息
     */
    ParkArmInfo findParkArmInfoByIp(String ip);

    /**
     * 获取指定车场编号下的启用状态下的车道信息
     *
     * @return 车道信息
     */
    List<ParkArmInfo> findParkArmInfosByParkCode();

    /**
     * 获取入口车道列表
     *
     * @return 车道信息
     */
    List<ParkArmInfo> findParkEnterArmInfos();

    /**
     * 删除对应车场编号的车场下的所有的计费规则信息
     *
     * @return 删除结果
     */
    Boolean removeByParkCode();

    /**
     * 监控中心获取数据信息
     *
     * @param workUser
     * @return
     */
    Map<String, Object> getData(String workUser);

    /**
     * 更新指定的车道信息
     *
     * @param parkArmInfo 车道信息
     * @return 更新结果
     */
    boolean updateEntity(ParkArmInfo parkArmInfo);

    /**
     * 保存车道信息实体
     *
     * @param parkArmInfo 车道信息
     * @return 保存结果
     */
    boolean saveEntity(ParkArmInfo parkArmInfo);

    /**
     * 根据id删除车道信息
     *
     * @param id 车道信息id
     * @return 删除结果
     */
    boolean deleteEntityById(String id);

    /**
     * 根据id列表批量删除车道信息
     *
     * @param ids 车道信息id列表
     * @return 删除结果
     */
    boolean deleteEntityByIds(List<String> ids);

    /**
     * 清空表数据
     *
     * @return true 清空成功
     */
    boolean removeAllInfo();

    /**
     * 生成入场记录
     *
     * @param parkArmInfo
     * @param reChargeVo
     * @param sdkIdentifyResultPushLog
     * @return
     */
    ParkCarEnterLog getParkCarEnterLog(ParkArmInfo parkArmInfo, ReChargeVo reChargeVo, SdkIdentifyResultPushLog sdkIdentifyResultPushLog);

    /**
     * 根据相机类型获拼接频流rtsp地址
     *
     * @param parkArmInfo
     * @param configParkInfo
     * @return
     */
    String jointRtspUrl(ParkArmInfo parkArmInfo, ConfigParkInfo configParkInfo);

    /**
     * 根据相机类型拼接视频流video地址
     *
     * @param parkArmInfo
     * @param configParkInfo
     * @return
     */
    String jointVideoUrl(ParkArmInfo parkArmInfo, ConfigParkInfo configParkInfo);

    /**
     * 根据used_user_id得到工作站
     *
     * @param userId
     * @return
     */
    ParkWorkStation getWorkFromUserId(String userId);

    /**
     * 得到出入口车道监控的名称
     *
     * @param workName 工作站名
     * @param type     出入口类型
     * @return
     * @throws Exception
     */
    List<ParkArmInfo> monitorArmList(String workName, String type) throws Exception;

    /**
     * 查询当前工作站下所管辖得车道
     *
     * @param workStationId 工作站id
     * @return
     * @throws Exception
     */
    List<ParkArmInfo> workStationId(String workStationId) throws Exception;

    /**
     * 通过工作站id把车道的用户id更新下
     *
     * @param id     工作站id
     * @param userId 用户id
     * @return
     */
    boolean updateArmByWork(String id, String userId);
}
